package com.ktgj.flight.domain.InterfaceEntity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 航班查询返回信息类
 */
public class MoFlightSearchResponse extends MoResponse implements Serializable {
    public MoFlightSearchResponse()
    {
        ListGoFlightInfo = new ArrayList<com.ktgj.flight.domain.InterfaceEntity.MoFlightInfo>();
        ListBackFlightInfo = new ArrayList<com.ktgj.flight.domain.InterfaceEntity.MoFlightInfo>();
        transferFlightInfo = new ArrayList<com.ktgj.flight.domain.InterfaceEntity.MoFlightInfo>();
        //ListGoFlightList = new ArrayList<com.ktgj.flight.domain.InterfaceEntity.MoFlightInfo>();
        //ListBackFlightList = new ArrayList<com.ktgj.flight.domain.InterfaceEntity.MoFlightInfo>();
        TripCroupList = new ArrayList<>();
    }

    /**
     * 航班信息集合（去程未排序）
     */
    public List<com.ktgj.flight.domain.InterfaceEntity.MoFlightInfo> ListGoFlightInfo;
    /**
     * 航班信息集合（返程未排序）
     */
    public List<com.ktgj.flight.domain.InterfaceEntity.MoFlightInfo> ListBackFlightInfo;

    /**
     * 航班信息集合（去程已排序）
     */
    //public List<com.ktgj.flight.domain.InterfaceEntity.MoFlightInfo> ListGoFlightList;
    /**
     * 航班信息集合（返程已排序）
     */
    //public List<com.ktgj.flight.domain.InterfaceEntity.MoFlightInfo> ListBackFlightList;

    /**
     * 中转航班信息集合（中转）
     */
    public List<com.ktgj.flight.domain.InterfaceEntity.MoFlightInfo> transferFlightInfo;

    /**
     * 航线组合包(符合当前价格的航线有可能存在多条组合)
     */
    public List<TripCroup> TripCroupList;

    /**
     * 指定查询返回的ID，验价接口需要使用此字段
     */
    public String Piid;

    public int channelType; //渠道类型

    /**
     * 舱位信息
     */
    class MoCabinInfo
    {
        public MoCabinInfo()
        {
            ListSubCabin = new ArrayList<>();
            ProductPolicy = new MoProductPolicy();
            WebAmountInfo = new MoAmountInfo();
            AppAmountInfo = new MoAmountInfo();
            CallCenterAmountInfo = new MoAmountInfo();
            CabinRule = new MoCabinRule();
            MoFRefundAndChangFeeRequest = new MoFlightRefundAndChangFeeRequest();
        }
        public MoFlightRefundAndChangFeeRequest MoFRefundAndChangFeeRequest;
        /**
         * 产品信息
         */
        public MoProductPolicy ProductPolicy;
        /**
         * 舱位
         */
        public String Cabin;
        /**
         * 舱位等级
         */
        public String BaseCabin;
        /**
         * 从SHOPPING获取的基价
         */
        public BigDecimal BaseAmount;
        /**
         * 从SHOPPING获取原始折扣 如：100
         */
        public BigDecimal BaseDisCountRate;

        public MoProductPolicy getProductPolicy() {
            return ProductPolicy;
        }

        public void setProductPolicy(MoProductPolicy productPolicy) {
            ProductPolicy = productPolicy;
        }

        public String getCabin() {
            return Cabin;
        }

        public void setCabin(String cabin) {
            Cabin = cabin;
        }

        public String getBaseCabin() {
            return BaseCabin;
        }

        public void setBaseCabin(String baseCabin) {
            BaseCabin = baseCabin;
        }

        public BigDecimal getBaseAmount() {
            return BaseAmount;
        }

        public void setBaseAmount(BigDecimal baseAmount) {
            BaseAmount = baseAmount;
        }

        public BigDecimal getBaseDisCountRate() {
            return BaseDisCountRate;
        }

        public void setBaseDisCountRate(BigDecimal baseDisCountRate) {
            BaseDisCountRate = baseDisCountRate;
        }

        /**
         * 网站显示的价格
         */
        public MoAmountInfo WebAmountInfo;
        /**
         * 手机客户端显示的价格
         */
        public MoAmountInfo AppAmountInfo;
        /**
         * 呼叫中心显示的价格
         */
        public MoAmountInfo CallCenterAmountInfo;
        /**
         * 舱位剩余座位数
         */
        public int CabinLeft;
        /**
         * 舱位标识
         */
        public String CabinMark;
        /**
         * 子舱位（1到多个子舱位）
         */
        public List<String> ListSubCabin;
        /**
         * 退改签规则
         */
        public MoCabinRule CabinRule;
        /**
         * 儿童退改签规则
         */
        public MoCabinRule ChdCabinRule;
        /**
         * 婴儿退改签规则
         */
        public MoCabinRule IftCabinRule;
        /**
         * 舱位等级（参照枚举：EnumHelper.CabinLevel）
         */
        public int CabinLevel;
        /**
         * 酷讯跳转信息
         */
        public String SP;
        /**
         * 用于解析携程时的产品索引
         */
        public String ProductIndex;
        /**
         * 用于解析携程时的舱位索引(PocliyInfo与Product数量一致)
         */
        public String PolicyIndex;
        /**
         * 用于解析携程时的退改签索引
         */
        public String PolicyRuleIndex;
        /**
         * 2015-05-11 新增过滤价格
         */
        public boolean IsRemove;
        /**
         * 允许下单证件类型列表,多个是用‘,’分割，格式如：0,1,2
         */
        public String AcceptableIDCardTypeList;
        /**
         * 年龄限制 字符串类型，多个使用‘,’分割，格式如：13-23,60-90 （13岁到23岁和60岁到90岁）
         */
        public String PassengerAgeLimit;
        /**
         * 餐食 Y|N
         */
        public String Meal;
        /**
         * 差价（升舱费）
         */
        public BigDecimal DiffPriceAdt;
        /**
         * 改期费
         */
        public BigDecimal ChangeFeeAdt;
        /**
         * 是否全额行程单（true 全额行程单，false 部分行程单加差额发票）
         */
        public boolean IsFullReceipt;
        /**
         * 儿童相关信息
         */
        public CabinPassenger ChdCabin;
        /**
         * 婴儿相关信息
         */
        public CabinPassenger InfCabin;

        public int getCabinLeft() {
            return CabinLeft;
        }

        public void setCabinLeft(int cabinLeft) {
            CabinLeft = cabinLeft;
        }

        public String getCabinMark() {
            return CabinMark;
        }

        public void setCabinMark(String cabinMark) {
            CabinMark = cabinMark;
        }

        public List<String> getListSubCabin() {
            return ListSubCabin;
        }

        public void setListSubCabin(List<String> listSubCabin) {
            ListSubCabin = listSubCabin;
        }

        public MoCabinRule getCabinRule() {
            return CabinRule;
        }

        public void setCabinRule(MoCabinRule cabinRule) {
            CabinRule = cabinRule;
        }

        public MoCabinRule getChdCabinRule() {
            return ChdCabinRule;
        }

        public void setChdCabinRule(MoCabinRule chdCabinRule) {
            ChdCabinRule = chdCabinRule;
        }

        public MoCabinRule getIftCabinRule() {
            return IftCabinRule;
        }

        public void setIftCabinRule(MoCabinRule iftCabinRule) {
            IftCabinRule = iftCabinRule;
        }

        public int getCabinLevel() {
            return CabinLevel;
        }

        public void setCabinLevel(int cabinLevel) {
            CabinLevel = cabinLevel;
        }

        public String getSP() {
            return SP;
        }

        public void setSP(String SP) {
            this.SP = SP;
        }

        public String getProductIndex() {
            return ProductIndex;
        }

        public void setProductIndex(String productIndex) {
            ProductIndex = productIndex;
        }

        public String getPolicyIndex() {
            return PolicyIndex;
        }

        public void setPolicyIndex(String policyIndex) {
            PolicyIndex = policyIndex;
        }

        public String getPolicyRuleIndex() {
            return PolicyRuleIndex;
        }

        public void setPolicyRuleIndex(String policyRuleIndex) {
            PolicyRuleIndex = policyRuleIndex;
        }

        public boolean isRemove() {
            return IsRemove;
        }

        public void setRemove(boolean remove) {
            IsRemove = remove;
        }

        public String getAcceptableIDCardTypeList() {
            return AcceptableIDCardTypeList;
        }

        public void setAcceptableIDCardTypeList(String acceptableIDCardTypeList) {
            AcceptableIDCardTypeList = acceptableIDCardTypeList;
        }

        public String getPassengerAgeLimit() {
            return PassengerAgeLimit;
        }

        public void setPassengerAgeLimit(String passengerAgeLimit) {
            PassengerAgeLimit = passengerAgeLimit;
        }

        public String getMeal() {
            return Meal;
        }

        public void setMeal(String meal) {
            Meal = meal;
        }

        public BigDecimal getDiffPriceAdt() {
            return DiffPriceAdt;
        }

        public void setDiffPriceAdt(BigDecimal diffPriceAdt) {
            DiffPriceAdt = diffPriceAdt;
        }

        public BigDecimal getChangeFeeAdt() {
            return ChangeFeeAdt;
        }

        public void setChangeFeeAdt(BigDecimal changeFeeAdt) {
            ChangeFeeAdt = changeFeeAdt;
        }

        public boolean isFullReceipt() {
            return IsFullReceipt;
        }

        public void setFullReceipt(boolean fullReceipt) {
            IsFullReceipt = fullReceipt;
        }

        public CabinPassenger getChdCabin() {
            return ChdCabin;
        }

        public void setChdCabin(CabinPassenger chdCabin) {
            ChdCabin = chdCabin;
        }

        public CabinPassenger getInfCabin() {
            return InfCabin;
        }

        public void setInfCabin(CabinPassenger infCabin) {
            InfCabin = infCabin;
        }
    }

    /**
     * 产品政策信息
     */
    public class MoProductPolicy
    {
        /**
         * 政策返点 (特殊情况充当份数)
         */
        public String PolicyPoint;

        /**
         * 政策id
         */
        public String PolicyId;

        /**
         * 政策类型（参照枚举EnumHelper.PolicyType）
         */
        public int PolicyType;

        /**
         * 产品类型（参照枚举EnumHelper.ProductType）
         */
        public int ProductType;

        /**
         * 产品代码
         * */
        public String ProductCode;

        /**
         * 产品类型（由第三方公司查询接口返回的通传数据，此属性赋值内容以第三方接口返回数据为准）
         */
        public String StrProductType;

        /**
         * 产品属性（包机，切位，占座免票，中转弃程）
         */
        public String ProductAttribute;

        /**
         * 第三方接口 下属供应商ID
         */
        public String ProviderCode;

        /**
         * 第三方接口
         */
        public int RequestType;

        /**
         * 飞享金 大于0标识飞享金产品，支付时候不需要加载票价上，但退票要多扣客人这个飞享金
         */
        public BigDecimal Subsidy;

        /**
         * 2016.12.30 增加第三方产品名称
         */
        public String ProductName;

        public String getPolicyPoint() {
            return PolicyPoint;
        }

        public void setPolicyPoint(String policyPoint) {
            PolicyPoint = policyPoint;
        }

        public String getPolicyId() {
            return PolicyId;
        }

        public void setPolicyId(String policyId) {
            PolicyId = policyId;
        }

        public int getPolicyType() {
            return PolicyType;
        }

        public void setPolicyType(int policyType) {
            PolicyType = policyType;
        }

        public int getProductType() {
            return ProductType;
        }

        public void setProductType(int productType) {
            ProductType = productType;
        }

        public String getStrProductType() {
            return StrProductType;
        }

        public void setStrProductType(String strProductType) {
            StrProductType = strProductType;
        }

        public String getProductAttribute() {
            return ProductAttribute;
        }

        public void setProductAttribute(String productAttribute) {
            ProductAttribute = productAttribute;
        }

        public String getProviderCode() {
            return ProviderCode;
        }

        public void setProviderCode(String providerCode) {
            ProviderCode = providerCode;
        }

        public int getRequestType() {
            return RequestType;
        }

        public void setRequestType(int requestType) {
            RequestType = requestType;
        }

        public BigDecimal getSubsidy() {
            return Subsidy;
        }

        public void setSubsidy(BigDecimal subsidy) {
            Subsidy = subsidy;
        }

        public String getProductName() {
            return ProductName;
        }

        public void setProductName(String productName) {
            ProductName = productName;
        }
    }
    public static class CabinPassenger
    {
        /**
         * 票价
         */
        public BigDecimal Price;
        /**
         * 舱位代码
         */
        public String Cabin;
        /**
         * 原始票价，目前只有华夏适用
         */
        public BigDecimal OrgPrice;
        /**
         * 机建费
         */
        public BigDecimal AirportTax;
        /**
         * 燃油费
         */
        public BigDecimal FuelTax;
        /**
         * true 跟随大人舱位，false不跟随大人舱位
         */
        public boolean follow;

        public BigDecimal getPrice() {
            return Price;
        }

        public void setPrice(BigDecimal price) {
            Price = price;
        }

        public String getCabin() {
            return Cabin;
        }

        public void setCabin(String cabin) {
            Cabin = cabin;
        }

        public BigDecimal getOrgPrice() {
            return OrgPrice;
        }

        public void setOrgPrice(BigDecimal orgPrice) {
            OrgPrice = orgPrice;
        }

        public BigDecimal getAirportTax() {
            return AirportTax;
        }

        public void setAirportTax(BigDecimal airportTax) {
            AirportTax = airportTax;
        }

        public BigDecimal getFuelTax() {
            return FuelTax;
        }

        public void setFuelTax(BigDecimal fuelTax) {
            FuelTax = fuelTax;
        }

        public boolean isFollow() {
            return follow;
        }

        public void setFollow(boolean follow) {
            this.follow = follow;
        }
    }
}
